Así que tengo este código Javascript simple en el que comparo los artículos del carrito almacenados en la base de datos con los nuevos artículos del carrito enviados por el cliente. Pero recibo este nuevo error que nunca antes había visto:
# # Fatal error in , line 0 # Fatal JavaScript invalid size error 178414678 # # # #FailureMessage Object: 000000DCF17BE620 1: 00007FF7F50A401F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+112511 2: 00007FF7F4FC116F v8::CFunctionInfo::HasOptions+7055 3: 00007FF7F5C97302 V8_Fatal+162 4: 00007FF7F5820C65 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArray+101 5: 00007FF7F56CA463 v8::internal::FeedbackNexus::ic_state+62771 6: 00007FF7F56E0FC0 v8::Message::GetIsolate+15840 7: 00007FF7F5555681 v8::internal::CompilationCache::IsEnabledScriptAndEval+26849 8: 00007FF7F59F34B1 v8::internal::SetupIsolateDelegate::SetupHeap+494417 9: 000001F9C44485C2 Lo que hace el código es verificar si la identificación del producto es la misma o no en ambas matrices. Si es así, simplemente reemplazará la unidad de artículo del carrito de la base de database cart item con la unidad client-sent cart item . Si no es así, simplemente empujará el client-sent cart item a la matriz database-stored cart items . Eso es todo lo que hace.
El código:
const dbCartItems = [ { productID: '1233433', unit: 1 }, { productID: 'asfa34wr', unit: 2 } ]; const clientCartItems = [ { productID: 'dfhgdf46t3', unit: 4 }, { productID: 'hgfh566', unit: 1 }, { productID: '32523', unit: 1 } ]; for ( let i = 0; i < dbCartItems.length; i++ ) { for ( let j = 0; j < clientCartItems.length; j++ ) { if ( dbCartItems[ i ].productID === clientCartItems[ j ].productID ) { dbCartItems[ i ].unit = clientCartItems[ j ].unit; } else { dbCartItems.push( clientCartItems[ j ] ); } } } console.log( dbCartItems );¿Alguien puede explicar qué está mal con el código que arroja este tipo de error que nunca antes había visto?
Está agregando continuamente a la misma matriz que resulta en un bucle infinito. Cree una nueva matriz y agréguele elementos.
Toda tu lógica es incorrecta. Está utilizando bucles anidados y eso generaría resultados incorrectos incluso si usa una nueva matriz para almacenar elementos en ella.
Su código debería verse así:
// get all product ids from dbCartItems array const dbCartItemsProductIds = dbCartItems.map(cartItem => cartItem.productID); for(let i=0;i<clientCartItems.length;i++) { const indexOfClientItemInDb = dbCartItemsProductIds.indexOf(clientCartItems[i].productID); // if clientCartItemProductId found in dbCartItemsProductIds if(indexOfClientItemInDb!== -1) { dbCartItems[indexOfClientItemInDb].unit = clientCartItems[i].unit; } else { dbCartItems.push(clientCartItems[i]); } } Primero, obtenga todos los productIds de dbCartItems (para que coincidan con los productids de clientCartItems . Ahora, para cada clientCartItems , verifique si el id del producto del artículo está presente en dbCartItemsProductIds , luego cambie el número de unidades, de lo contrario, agregue el artículo a dbCartItems .